<?php
namespace app\admin\controller;
use think\Controller;
use think\Config;
use phpSms\SignatureHelper;

/**
 * 
 */
class Sendsms extends Controller
{
    var $keyId;
    var $keySecret;
    var $hots;
    var $SignName;
    function __construct()
    {
        $sms = Config('aliyunOss');
        $this->keyId = $sms['KeyId'];
        $this->keySecret = $sms['KeySecret'];
        $this->hots = $sms['hots'];
        $this->SignName = $sms['SignName'];
        ini_set("display_errors", "on"); // 显示错误提示，仅用于测试时排查问题
        // error_reporting(E_ALL); // 显示所有错误提示，仅用于测试时排查问题
        set_time_limit(0); // 防止脚本超时，仅用于测试使用，生产环境请按实际情况设置
        header("Content-Type: text/plain; charset=utf-8"); // 输出为utf-8的文本格式，仅用于测试

    }


    /**
 * 发送短信
 */
function sendSms($phone = '',$TemplateParam = array('code'=>'0009','product'=>'阿里云通讯'),$TemplateCode = 'SMS_0000001',$security = false,$OutId = '12345',$SmsUpExtendCode='1234567') {

    $params = array ();
    // *** 需用户填写部分 ***
    // fixme 必填：是否启用https
    $security = $security;

    // fixme 必填: 短信接收号码
    $params["PhoneNumbers"] = $phone;

    // fixme 必填: 短信签名，应严格按"签名名称"填写，请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign
    $params["SignName"] = $this->SignName;

    // fixme 必填: 短信模板Code，应严格按"模板CODE"填写, 请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/template
    $params["TemplateCode"] = $TemplateCode;

    // fixme 可选: 设置模板参数, 假如模板中存在变量需要替换则为必填项
    $params['TemplateParam'] = $TemplateParam;

    // fixme 可选: 设置发送短信流水号
    $params['OutId'] = $OutId;

    // fixme 可选: 上行短信扩展码, 扩展码字段控制在7位或以下，无特殊需求用户请忽略此字段
    $params['SmsUpExtendCode'] = $SmsUpExtendCode;


    // *** 需用户填写部分结束, 以下代码若无必要无需更改 ***
    if(!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {
        $params["TemplateParam"] = json_encode($params["TemplateParam"], JSON_UNESCAPED_UNICODE);
    }

    // 初始化SignatureHelper实例用于设置参数，签名以及发送请求
    $helper = new SignatureHelper();
    // 此处可能会抛出异常，注意catch
    $content = $helper->request(
        $this->keyId,
        $this->keySecret,
        $this->hots,
        array_merge($params, array(
            "RegionId" => "cn-hangzhou",
            "Action" => "SendSms",
            "Version" => "2017-05-25",
        )),
        $security
    );
    return $content;
}

/**
 * 批量发送短信
 */
function sendBatchSms($Phones = array("1500000000","1500000001"),$Signs = array("云通信","云通信2"),$TemplateCode = 'SMS_0000001',$SmsUpExtendCode = '1234567',$TemplateParamJson = array(
        array(
            "name" => "Tom",
            "code" => "123"
        ),
        array(
            "name" => "Jack",
            "code" => "456"
        ),
    )) {

    $params = array ();

    // *** 需用户填写部分 ***
    // fixme 必填：是否启用https
    $security = false;


    // fixme 必填: 短信模板Code，应严格按"模板CODE"填写, 请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/template
    $params["TemplateCode"] = $TemplateCode;


    // todo 可选: 上行短信扩展码, 扩展码字段控制在7位或以下，无特殊需求用户请忽略此字段
    // $params["SmsUpExtendCodeJson"] = json_encode(array("90997","90998"));


    // *** 需用户填写部分结束, 以下代码若无必要无需更改 ***$params = array ();

    // TemplateParamJson 必填: 模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
    // 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
    $params["TemplateParamJson"]  = json_encode($TemplateParamJson, JSON_UNESCAPED_UNICODE);


    // Signs 必填: 短信签名，支持不同的号码发送不同的短信签名，每个签名都应严格按"签名名称"填写，请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign
    $params["SignNameJson"] = json_encode( $Signs, JSON_UNESCAPED_UNICODE);
    
    // $Phones 必填: 待发送手机号。支持JSON格式的批量调用，批量上限为100个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
    $params["PhoneNumberJson"] = json_encode($Phones, JSON_UNESCAPED_UNICODE);

    if(!empty($params["SmsUpExtendCodeJson"]) && is_array($params["SmsUpExtendCodeJson"])) {
        $params["SmsUpExtendCodeJson"] = json_encode($params["SmsUpExtendCodeJson"], JSON_UNESCAPED_UNICODE);
    }

    // 初始化SignatureHelper实例用于设置参数，签名以及发送请求
    $helper = new SignatureHelper();

    // 此处可能会抛出异常，注意catch
    $content = $helper->request(
        $this->keyId,
        $this->keySecret,
        $this->hots,
        array_merge($params, array(
            "RegionId" => "cn-hangzhou",
            "Action" => "SendBatchSms",
            "Version" => "2017-05-25",
        )),
        $security
    );

    return $content;
}


/**
 * 短信发送记录查询
 */
function querySendDetails($phone = '',$SendDate = "20181024",$PageSize = 10,$CurrentPage=1,$BizId='yourBizId',$security = false) {

    $params = array ();

    // *** 需用户填写部分 ***
    // fixme 必填：是否启用https
    $security = false;

    // fixme 必填: 请参阅 https://ak-console.aliyun.com/ 取得您的AK信息
    // $accessKeyId = $keyId;
    // $accessKeySecret = $keySecret;

    // fixme 必填: 短信接收号码
    $params["PhoneNumber"] = $phone;

    // fixme 必填: 短信发送日期，格式Ymd，支持近30天记录查询
    $params["SendDate"] = $SendDate;

    // fixme 必填: 分页大小
    $params["PageSize"] = $PageSize;

    // fixme 必填: 当前页码
    $params["CurrentPage"] = $CurrentPage;

    // fixme 可选: 设置发送短信流水号
    $params["BizId"] = $BizId;

    // *** 需用户填写部分结束, 以下代码若无必要无需更改 ***

    // 初始化SignatureHelper实例用于设置参数，签名以及发送请求
    $helper = new SignatureHelper();

    // 此处可能会抛出异常，注意catch
    $content = $helper->request(
        $this->keyId,
        $this->keySecret,
        $this->hots,
        array_merge($params, array(
            "RegionId" => "cn-hangzhou",
            "Action" => "QuerySendDetails",
            "Version" => "2017-05-25",
        )),
        $security
    );

    return $content;
}
}
